package org.nanotek.cms.domain.person;

import java.io.Serializable;

import org.nanotek.Base;
import org.nanotek.Kong;


/**
 * An Individual interface, describes a mathematical classification of "a class of objects that 
 * obey the following statement 'An element of a Type T describes  
 * a single element of the on a set of individuals of type P' and such individual has a Key <K>. 
 * 
 * What this Interface means exactly? Besides the Key which retrieves an Instance the Individual, 
 * Other attributes that not necessary the 'Key Object' also defines a single Individual
 * (or a Collection of Individuals that are exactly identical except by its Key (the ID)). 
 * 
 * @author josecanovamauger
 *
 * @param <T> A Type Class that will be used ti 
 * @param <P> The Type Class that describes the Individual I. 
 */
public interface Individual<T,P extends Individual<T,P,K>,K extends Serializable> extends Base<K>, Kong<Class<P>>{

	public P getIndividual(T type);
	
}
